#include <iostream>
using std::cout;
using std::endl;

void print(int x){
    cout << "print:" << x << endl;
}

void display(int x){
    cout << "display:" << x << endl;
}

void show(){
    cout << "show" << endl;
}

//给这种类型的指针变量总结出一个类型名称
typedef void (*Function)(int);

void test0(){
    //定义函数指针时确定其指向的函数的返回类型与参数信息
    //省略形式
    void (*p1)(int) = print;
    p1(3);
    p1 = display;
    p1(4);
    /* p1 = show; */

    //完整形式
    void (*p2)(int) = &print;
    (*p2)(5);
    p2 = &display;
    (*p2)(6);

    //void (*)(int)只能作为逻辑类型，不能在代码中直接使用
    /* void (*)(int) p3 = print; */

    //Function是一类函数指针的类型名称
    Function f1 = print;
    f1(10);
    f1 = &display;
    (*f1)(18);
    /* f1 = show; */
}

int main(void){
    test0();
    return 0;
}
